package net.sf.rose.common;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * @author fengjian
 * @since 2013-4-17
 */
public class KeyGenerator {

	/** 日期格式化类 */
	private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHH");

	/** 记数器值缓存 */
	private static final Map<String, Integer> countMap = new HashMap<String, Integer>();

	/**
	 * 生成主键
	 * @param beanName - 主键首位标识:取类名的前四位作为前缀，如果类名称不满四位长则取全部
	 * @return - 主键
	 */
	public static String getUID(String beanName) {
		// 取类名的前四位作为前缀，如果类名称不满四位长则取全部
		String pre = beanName.length() > 4 ? beanName.substring(0, 4) : beanName;
		pre = pre.toUpperCase();
		// 从缓存中取出此前缀相关的记数，如果没有或大于9999，则置1000
		Integer count = countMap.get(pre);
		count = count == null || count > 9999 ? 1000 : ++count;
		countMap.put(pre, count);
		return pre + dateFormat.format(new Date()) + count;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		System.out.println(getUID("abc"));
		System.out.println(getUID("fengjian"));
		System.out.println(getUID("fengjian"));
	}
}
